import axios from 'axios'
import { mainStore } from '@store'
import { ElMessage } from 'element-plus'

const store = mainStore()
const baseUrl = '/api'

// 创建一个 axios 实例
const service = axios.create({
  baseURL: `${baseUrl}`,
  timeout: 60000, // 请求超时时间毫秒 暂定60秒即可
  // withCredentials: true, // 异步请求携带cookie,开启时需要后端把前端项目源地址加入，否则会跨域
  headers: {},
})

// 记录全局请求状态
let isRequestInProgress = false

// 添加请求拦截器 发起请求前先拦截
service.interceptors.request.use(
  function (config) {
    // 检测用户是否断网
    // 在发送请求之前对其他非开放接口携带上token
    // if (isRequestInProgress) {
    //   // 如果已有请求在进行，驳回新的请求
    //   return ElMessage.error('请等待上一个请求结束')
    // }
    if (config.noApiPrefix) {
      config.baseURL = '' // 不加 `/api` 的情况
    }

    isRequestInProgress = true // 标记请求开始
    return config
  },
  function (error) {
    // 对请求错误做些什么
    // 比如token过期跳转到登录页面
    return Promise.reject(error)
  }
)

// 添加响应拦截器
service.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 检测到用户未登录先登录
    isRequestInProgress = false // 即使失败也清除标记
    return response
  },

  function (error) {
    isRequestInProgress = false // 即使失败也清除标记
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    // return Promise.reject(error)
    // return ElMessage.error('请求出错了')
  }
)

export default service
